#include <stdio.h>
#include <sys/types.h>
#include <signal.h>

void signalHandle(int arg)
{
    printf("%d signalHandle\n", arg);
}

int main(int argc, char *argv[]) // ./a.out 3445
{
    // 将SIGUSR1信号   设置 一个信号响应函数
    signal(SIGUSR1, signalHandle);

    // 1）先定义一个信号集变量
    sigset_t set;
    // 2) 初始化（清空）
    sigemptyset(&set); // 清空信号集
    // 3）将信号 添加到集合中 SIGUSR1
    sigaddset(&set, SIGUSR1); // 在指定的信号集set中，添加一个指定的信号signum到集合中

    // 4) 判断 SIGUSR1信号是否在集合中，如果在打印yes  ，否则 打印 no
    //  sigismember 信号在集合中 返回1  否则 返回 0
    if (sigismember(&set, SIGUSR1))
        printf("yes\n");
    else
        printf("no\n");

    // 将信号集中的所有的信号设置为 阻塞状态
    // 注意：设置的对象是信号，而不是进程，所以调用这个函数之后，程序还是会往下面走
    sigprocmask(SIG_BLOCK, &set, NULL);

    sleep(20); // 延时20S

    // 再解除阻塞，也就是说，上面的20S之内，如果收到了信号SIGUSR1，那么进程会将这个信号挂起来，等到解除阻塞之后再执行信号响应函数
    sigprocmask(SIG_UNBLOCK, &set, NULL);

    return 0;
}